﻿using System.Runtime.InteropServices;

using Min.ExtendKit.Common.Core.Struct;


namespace Min.ExtendKit.Common.Core.Win32.API;

/// <summary>
///  提供对 Windows 系统信息的托管声明。
/// </summary>
internal class MemoryAPI
{
    /// <summary>
    /// 检索系统的当前内存状态信息。
    /// </summary>
    /// <param name="lpBuffer">
    /// 指向 <see cref="MEMORYSTATUSEX"/> 结构的引用，调用前需要设置 <c>dwLength</c> 字段为结构体大小，
    /// 调用成功后该结构会被填充为当前的内存状态信息（物理内存、虚拟内存、可用内存等）。
    /// </param>
    /// <returns>
    /// 如果函数调用成功，返回 <c>true</c>；
    /// 如果失败，返回 <c>false</c>，可通过 <see cref="Marshal.GetLastWin32Error"/> 获取错误代码。
    /// </returns>
    /// <remarks>
    /// 该 API 位于 <c>kernel32.dll</c>，是 Windows 原生函数，封装于 Win32 API 中。  
    /// 常用于监控系统内存使用情况，例如任务管理器、性能监控工具等。  
    /// </remarks>
    [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    internal static extern bool GlobalMemoryStatusEx(ref MEMORYSTATUSEX lpBuffer);
    //internal static extern bool GlobalMemoryStatusEx([In, Out] ref MEMORYSTATUSEX lpBuffer);
}
